Skip to content

fix(services): start ml jobs with the corvus-job entry point - #78

Merged
TheMeinerLP merged 2 commits into
mainfrom
fix/job-runner-command
Oct 16, 2026
Merged

TheMeinerLP merged 2 commits into
mainfrom
fix/job-runner-command

Conversation

@TheMeinerLP

Copy link
Copy Markdown
Contributor

Problem

Jobs started from the UI fail immediately in 0.3.0 with exec: "corvus-ml": executable file not found in $PATH. The runners defaulted job_k8s_command / job_local_command to ["corvus-ml"] (the package name); the corvus-ml image's ENTRYPOINT and console script is corvus-job.

Changes

  • Default commands are now ["corvus-job"] (settings, docs/reference/control-plane-api.md).
  • Tests: defaults are corvus-job; contract tests assert the default is a [project.scripts] entry of ml/pyproject.toml and equals the ml/Dockerfile ENTRYPOINT (skipped if ml/ is absent).
  • Job spec review: pods had no volumes. Added an emptyDir at /scratch (size limit CORVUS_API_JOB_K8S_SCRATCH_SIZE_LIMIT, default 20Gi) with CORVUS_JOB_SCRATCH_DIR and TMPDIR pointing at it. Unit tests cover the manifest, and that the job type is the first arg and equals CORVUS_JOB_TYPE.
  • Checked and unchanged: backoffLimit 0, ttl 24h, deadline 4h, non-root/seccomp/no escalation, CORVUS_API_URL/token come from the env secret (as in the helm values docs). The root filesystem is not read-only and the image sets HOME=/tmp, so no further cache dirs were needed.

Services tests, ruff, ruff format and mypy pass locally.

The job runners defaulted to the command "corvus-ml", which is the package
name and not an executable, so every Kubernetes job failed with
"executable file not found in $PATH". The ml image provides the console
script corvus-job. Change both defaults, fix the reference docs and add
tests that keep the defaults in sync with ml/pyproject.toml and the
ml/Dockerfile ENTRYPOINT.
Job pods mounted nothing, so feature builds wrote into the container
layer and the node's ephemeral storage. Mount an emptyDir at /scratch
(size limit configurable, default 20Gi) and point CORVUS_JOB_SCRATCH_DIR
and TMPDIR at it, as docs/reference/ml-jobs.md recommends.
@TheMeinerLP
TheMeinerLP merged commit 7b97289 into main Oct 16, 2026
13 checks passed
@TheMeinerLP
TheMeinerLP deleted the fix/job-runner-command branch October 16, 2026 09:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant